package com.itheima.interceptor;


import com.itheima.utils.CurrentHolder;
import com.itheima.utils.JWTUtils;
import io.jsonwebtoken.Claims;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class JWTInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String token = request.getHeader("token");

        //4.判断Token是否存在，如果不存在，说明用户没有登录，返回错误信息（响应401状态码）
        if (token == null) {
            response.setStatus(HttpStatus.SC_UNAUTHORIZED);
            return false;
        }
        //5.如果存在，校验令牌，如果校验失败，返回错误信息（响应401状态码）
        try {
            // 解析JWT令牌，以获取其中的声明信息
            Claims claims = JWTUtils.parseToken(token);

            // 从声明信息中提取"id"字段，并将其转换为Integer类型
            Integer id = Integer.valueOf(claims.get("id").toString());

            // 将解析得到的用户ID设置为当前操作的用户ID
            CurrentHolder.setCurrentId((id));
        } catch (Exception e) {
            response.setStatus(HttpStatus.SC_UNAUTHORIZED);
            return false;
        }
        //6.如果校验成功，
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        CurrentHolder.remove();
    }


}
